iT邦幫忙

2025 iThome 鐵人賽

DAY 1
0
Security

現在是pwn的天下!系列 第 1

【Day-1】介紹ELF與ASM

  • 分享至 

  • xImage
  •  

前言

這次的文章主要是參考張元的影片來做筆記,接下來要介紹關於ELF與ASM的部分

ELF

  • Executable and linkable format
  • 執行檔 ex. .exe
  • section
    • 執行時會mapping到RAM上(virtual memory)
    • .text .bss .data .rodata .got .plt .fini

ELF - Section

.bss : 存放未初始化值的全域變數 (global variable)
.data : 存放具初始化值的全域變數
.rodata : 存放唯讀(read only)資料
.text : 存放編譯後的code
image

x64 Assembly

image

  • Registers
    • RSP - Stack Pointer Registers
      • 指向stack頂端(頭)
    • RBP - Base Pointer Registers
      • 指向stack底端(尾)
    • RIP - Register Instruction Pointer
      • 指向當前執行指令instruction位置

  • jmp - 跳至程式某一個地址A(address)執行
    • jmp A = mov rip, A
  • call - 將call完後回來緊接著要執行下一行指令位置push到stack上儲存起來,在跳過去執行
    • call A = push next_rip
      mov rip, A
    • 兩個instruction
      • call func = push next-rip
      • jmp func
      • next-rip 會push到stack上
  • leave - 還原至caller的stack frame
    • mov rsp, rbp
      pop rbp
    • 兩個instruction
      • leave = mov rsp, rbp
      • pop rbp ; rbp會指到stack的位置
  • ret(return)
    • pop rip
    • 會把rsp指向的值塞到rip

compiler前面三行通常都為:

func:
    push rbp ; 把saved rbp疊上去stack
    mov rbp, rsp
    sub rsp, 0x70 ;把stack往前減一個空間(0x70), 目的是預留local variable 需要用到的空間

image

x64 calling convention

  • Pass parameters
    • rdi, rsi, rcx, r8, r9, (stack)
    • rdi, rsi, rdx, r10, r8, r9 (stack)
    • rax - store return value
  • x64 - register 傳參
  • x86 - stack 傳參

資料來源

https://github.com/yuawn/NTU-Computer-Security


下一篇
【Day-2】暫存器 (register) 介紹
系列文
現在是pwn的天下!30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言